4fb5c44d6f72cc7563431a45ffc06c6a8daf1c16,core/src/main/java/com/orientechnologies/orient/core/sql/OCommandExecutorSQLSelect.java,OCommandExecutorSQLSelect,applyFlatten,#,949

Before Change


        Object r = ((OSQLFilterItemVariable) flattenTarget).getValue(null, context);
        if (r != null) {
          if (r instanceof OIdentifiable)
            ((Collection<OIdentifiable>) tempResult).add((OIdentifiable) r);
          else if (OMultiValue.isMultiValue(r)) {
            for (Object o : OMultiValue.getMultiValueIterable(r))
              ((Collection<OIdentifiable>) tempResult).add((OIdentifiable) o);
          }
        }
      }
    } else {
      OFlattenIterator finalResult = new OFlattenIterator();
      for (OIdentifiable id : tempResult) {
        if (flattenTarget instanceof OSQLFilterItem)
          fieldValue = ((OSQLFilterItem) flattenTarget).getValue(id.getRecord(), context);
        else if (flattenTarget instanceof OSQLFunctionRuntime)
          fieldValue = ((OSQLFunctionRuntime) flattenTarget).getResult();
        else
          fieldValue = flattenTarget.toString();

        if (fieldValue != null)
          if (fieldValue instanceof Collection<?>) {
            finalResult.add((Collection<OIdentifiable>) fieldValue);
          } else if (fieldValue instanceof Map<?, ?>) {
            finalResult.add(((Map<?, OIdentifiable>) fieldValue).values());
          } else if (fieldValue instanceof OFlattenIterator) {
            finalResult = (OFlattenIterator) fieldValue;
          } else if (fieldValue instanceof OIdentifiable)
            finalResult.add((OIdentifiable) fieldValue);
      }
      tempResult = finalResult;
    }

After Change


        }
      }
    } else {
      final List<OIdentifiable> finalResult = new ArrayList<OIdentifiable>();
      for (OIdentifiable id : tempResult) {
        if (flattenTarget instanceof OSQLFilterItem)
          fieldValue = ((OSQLFilterItem) flattenTarget).getValue(id.getRecord(), context);
        else if (flattenTarget instanceof OSQLFunctionRuntime)
          fieldValue = ((OSQLFunctionRuntime) flattenTarget).getResult();
        else
          fieldValue = flattenTarget.toString();

        if (fieldValue != null)
          if (fieldValue instanceof Collection<?>) {
            for (Object o : ((Collection<?>) fieldValue)) {
              if (o instanceof OIdentifiable)
                finalResult.add(((OIdentifiable) o).getRecord());
              else if (o instanceof List) {
                List<OIdentifiable> list = (List<OIdentifiable>) o;
                for (int i = 0; i < list.size(); i++)
                  finalResult.add(list.get(i).getRecord());
              }
            }
          } else if (fieldValue instanceof Map<?, ?>) {
            for (Map.Entry<?, ?> entry : ((Map<?, ?>) fieldValue).entrySet()) {
              final Object o = entry.getValue();

              if (o instanceof OIdentifiable)
                finalResult.add(((OIdentifiable) o).getRecord());
              else if (o instanceof List) {
                List<OIdentifiable> list = (List<OIdentifiable>) o;
                for (int i = 0; i < list.size(); i++)
                  finalResult.add(list.get(i).getRecord());
              }
            }
          } else
            finalResult.add((OIdentifiable) fieldValue);
      }
      tempResult = finalResult;
    }